/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	IBMscbMgr.java
 * 模块说明：	
 * 修改历史：
 * Oct 30, 2007 - lxm - 创建。
 */
package com.hd123.rumba.mscb.order.biz;

import java.util.List;
import java.util.Map;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.mscb.subscriber.Subscriber;
import com.hd123.rumba.prompt.provider.IPromptContent;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.runtime.biz.BPersistent;
import com.hd123.rumba.runtime.biz.IBManager;
import com.hd123.rumba.util.ClassifiedHashtable;

/**
 * 消息订阅管理员 | 业务层.维护 | 管理员 | 接口类s
 * 
 * @author lxm
 * 
 */
public interface IBMscbMgr extends IBManager {

  /**
   * 创建一个消息订阅单。
   * 
   * @param domainUuid
   *          所属域uuid。
   * @return 返回创建的消息订阅单。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BMscbOrder createOrder(String domainUuid) throws BusinessException, HibernateException;

  /**
   * 载入指定的消息订阅单。
   * 
   * @param uuid
   *          指定消息订阅单的uuid。
   * @return 返回取得的消息订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BMscbOrder loadOrder(String uuid) throws BusinessException, HibernateException;

  /**
   * 保存消息订阅单。
   * 
   * @param order
   *          指定被保存的消息订阅单。
   * @param operate
   * @return
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable saveOrder(BMscbOrder order, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 对指定消息订阅单的取消动作。
   * 
   * @param cancelledOrder
   *          指定被取消的消息订阅单。
   * @param subscriber
   *          指定取消动作指向的订阅人。
   * @param operate
   * @return
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable cancelOrder(BMscbOrder cancelledOrder, Subscriber subscriber,
      OperateContext operate) throws BusinessException, HibernateException;

  /**
   * 取得指定的消息订阅单。
   * 
   * @param <T>
   * @param uuid
   *          指定消息订阅单的uuid。
   * @param bizClass
   * @return 返回找到的消息订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getOrder(String uuid, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 取得指定的有效的消息订阅单。
   * 
   * @param <T>
   * @param uuid
   *          指定消息订阅单的uuid。
   * @param bizClass
   * @return 返回找到的消息订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getValidOrder(String uuid, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 取得指定的消息取消订阅单。
   * 
   * @param <T>
   * @param uuid
   *          指定消息取消订阅单的uuid。
   * @param bizClass
   * @return 返回找到的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getCancelOrder(String uuid, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 取得指定的有效的消息取消订阅单。
   * 
   * @param <T>
   * @param uuid
   *          指定消息取消订阅单的uuid。
   * @param bizClass
   * @return 返回找到的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getValidCancelOrder(String uuid, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 取得指定消息订阅单所有相关消息取消订阅单。
   * 
   * @param <T>
   * @param orderUuid
   *          指定消息订阅单uuid。
   * @param bizClass
   * @return 返回找到的消息取消订阅单列表，若找不到则返回空列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> List<T> getCancelOrdersByOrder(String orderUuid, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 根据消息订阅单和订阅者取得有效的（未被删除）消息取消订阅单。
   * 
   * @param <T>
   * @param orderUuid
   *          指定消息订阅单uuid。
   * @param subscriber
   *          指定的订阅者。
   * @param bizClass
   * @return 返回找到的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getValidCancelOrderByKey(String orderUuid,
      Subscriber subscriber, Class<T> bizClass) throws BusinessException, HibernateException;

  /**
   * 触发。
   * 
   * @param domainUuid
   *          指定域uuid。允许null，表示在所有域范围触发。
   * @param subjectClass
   *          指定的数据对象类型。
   * @param event
   *          指定发生的事件。
   * @param dict
   *          指定传入的数据字典。允许null。
   * @param pmptCtx
   *          指定用于提醒信息的上下文。允许null。
   * @param operate
   * @throws BusinessException
   * @throws HibernateException
   */
  public void notifyT(String domainUuid, String subjectClass, String event,
      Map<String, Object> dict, IPromptContent pmptCtx, OperateContext operate)
      throws BusinessException, HibernateException;
}
